winsafe\taskschd\com_interfaces/itaskservice.rs
1#![allow(non_camel_case_types, non_snake_case)]
2
3use crate::decl::*;
4use crate::ole::privs::*;
5use crate::prelude::*;
6use crate::taskschd::vts::*;
7
8com_interface! { ITaskService: "2faba4c7-4da9-4013-9697-20cc3fd40f85";
9 /// [`ITaskService`](https://learn.microsoft.com/en-us/windows/win32/api/taskschd/nn-taskschd-itaskservice)
10 /// COM interface.
11 ///
12 /// Automatically calls
13 /// [`Release`](https://learn.microsoft.com/en-us/windows/win32/api/unknwn/nf-unknwn-iunknown-release)
14 /// when the object goes out of scope.
15 ///
16 /// # Examples
17 ///
18 /// ```no_run
19 /// use winsafe::{self as w, prelude::*, co};
20 ///
21 /// let obj = w::CoCreateInstance::<w::ITaskService>(
22 /// &co::CLSID::TaskScheduler,
23 /// None::<&w::IUnknown>,
24 /// co::CLSCTX::INPROC_SERVER,
25 /// )?;
26 /// # w::HrResult::Ok(())
27 /// ```
28}
29
30impl oleaut_IDispatch for ITaskService {}
31impl taskschd_ITaskService for ITaskService {}
32
33/// This trait is enabled with the `taskschd` feature, and provides methods for
34/// [`ITaskService`](crate::ITaskService).
35///
36/// Prefer importing this trait through the prelude:
37///
38/// ```no_run
39/// use winsafe::prelude::*;
40/// ```
41pub trait taskschd_ITaskService: oleaut_IDispatch {
42 /// [`ITaskService::Connect`](https://learn.microsoft.com/en-us/windows/win32/api/taskschd/nf-taskschd-itaskservice-connect)
43 /// method.
44 fn Connect(
45 &self,
46 server_name: Option<&str>,
47 user: Option<&str>,
48 domain: Option<&str>,
49 password: Option<&str>,
50 ) -> HrResult<()> {
51 ok_to_hrresult(unsafe {
52 (vt::<ITaskServiceVT>(self).Connect)(
53 self.ptr(),
54 Variant::from_opt_str(server_name).to_raw()?,
55 Variant::from_opt_str(user).to_raw()?,
56 Variant::from_opt_str(domain).to_raw()?,
57 Variant::from_opt_str(password).to_raw()?,
58 )
59 })
60 }
61
62 /// [`ITaskService::get_Connected`](https://learn.microsoft.com/en-us/windows/win32/api/taskschd/nf-taskschd-itaskservice-get_connected)
63 /// method.
64 #[must_use]
65 fn get_Connected(&self) -> HrResult<bool> {
66 let mut connected = i16::default();
67 ok_to_hrresult(unsafe {
68 (vt::<ITaskServiceVT>(self).get_Connected)(self.ptr(), &mut connected)
69 })
70 .map(|_| connected != 0)
71 }
72
73 fn_com_bstr_get! { get_ConnectedDomain: ITaskServiceVT;
74 /// [`ITaskService::get_ConnectedDomain`](https://learn.microsoft.com/en-us/windows/win32/api/taskschd/nf-taskschd-itaskservice-get_connecteddomain)
75 /// method.
76 }
77
78 fn_com_bstr_get! { get_ConnectedUser: ITaskServiceVT;
79 /// [`ITaskService::get_ConnectedUser`](https://learn.microsoft.com/en-us/windows/win32/api/taskschd/nf-taskschd-itaskservice-get_connecteduser)
80 /// method.
81 }
82
83 /// [`ITaskService::get_HighestVersion`](https://learn.microsoft.com/en-us/windows/win32/api/taskschd/nf-taskschd-itaskservice-get_highestversion)
84 /// method.
85 #[must_use]
86 fn get_HighestVersion(&self) -> HrResult<u32> {
87 let mut ver = 0u32;
88 ok_to_hrresult(unsafe {
89 (vt::<ITaskServiceVT>(self).get_HighestVersion)(self.ptr(), &mut ver)
90 })
91 .map(|_| ver)
92 }
93
94 fn_com_bstr_get! { get_TargetServer: ITaskServiceVT;
95 /// [`ITaskService::get_TargetServer`](https://learn.microsoft.com/en-us/windows/win32/api/taskschd/nf-taskschd-itaskservice-get_targetserver)
96 /// method.
97 }
98
99 /// [`ITaskService::GetFolder`](https://learn.microsoft.com/en-us/windows/win32/api/taskschd/nf-taskschd-itaskservice-getfolder)
100 /// method.
101 #[must_use]
102 fn GetFolder(&self, path: &str) -> HrResult<ITaskFolder> {
103 let mut queried = unsafe { ITaskFolder::null() };
104 ok_to_hrresult(unsafe {
105 (vt::<ITaskServiceVT>(self).GetFolder)(
106 self.ptr(),
107 BSTR::SysAllocString(path)?.as_ptr(),
108 queried.as_mut(),
109 )
110 })
111 .map(|_| queried)
112 }
113
114 /// [`ITaskService::NewTask`](https://learn.microsoft.com/en-us/windows/win32/api/taskschd/nf-taskschd-itaskservice-newtask)
115 /// method.
116 #[must_use]
117 fn NewTask(&self) -> HrResult<ITaskDefinition> {
118 let mut queried = unsafe { ITaskDefinition::null() };
119 ok_to_hrresult(unsafe {
120 (vt::<ITaskServiceVT>(self).NewTask)(self.ptr(), 0, queried.as_mut())
121 })
122 .map(|_| queried)
123 }
124}